"""
文本转语音服务
提供文本转语音功能，使用工厂模式创建具体实现
"""

from typing import Tuple, Dict, Any, Optional

import config

# 导入TTS工厂类
from .factory import TTSFactory
# 导入返回码枚举
from ..constants.return_codes import TTSErrorCode, BaseCodeEnum
# 导入日志工具
from ..utils.logger import get_logger


class TTSService:
    """
    文本转语音服务类
    作为使用者角色，通过工厂类获取具体实现完成TTS功能
    """

    def __init__(self):
        """
        初始化TTS服务
        """
        # 初始化日志记录器
        self.logger = get_logger(__name__)
        # 通过工厂创建TTS实现实例
        self.tts_implementation = TTSFactory.create_implementation()
        self.logger.info(f"已加载TTS实现: {type(self.tts_implementation).__name__}")

    def text_to_speech(self, text: str, voice: str = None, speed: str = None, timeout: Optional[int] = None) -> Tuple[BaseCodeEnum, Dict[str, Any]]:
        """
        将文本转换为语音
        
        Args:
            text: 要转换的文本内容
            voice: 音色，如果为None则使用默认值
            speed: 语速，如果为None则使用默认值
            
        Returns:
            Tuple[int, str, Dict[str, Any]]: (状态码, 音频文件路径, 结果信息)
            - 状态码: 200表示成功，5001表示参数错误，5002表示TTS转换失败
            - 音频文件路径: 生成的音频文件完整路径
            - 结果信息: 包含转换详情的字典
        """
        self.logger.info(f"开始文本转语音: text='{text}', voice={voice}, speed={speed}")

        # 参数验证
        if not text or not text.strip():
            self.logger.error("文本内容为空")
            return TTSErrorCode.TEXT_EMPTY, {}

        try:
            # 使用工厂创建的具体实现进行文本转语音
            status, result = self.tts_implementation.text_to_speech(
                text=text,
                voice=voice,
                speed=speed,
                timeout=(timeout or config.TTS_TIMEOUT)
            )
            return status, result
        except Exception as e:
            # 捕获实现类抛出的异常并转换为标准错误码
            self.logger.error(f"TTS实现类调用失败: {str(e)}")
            return TTSErrorCode.CONVERSION_FAILED, {}
